Duff’s device или loop unrolling в Си своими руками

Выглядит ли следующий код валидным С++ кодом? Если да, то какое значение будет выведено в результате его работы?

#include <iostream>  int main() {   int number = 11;        int count  = number / 4;   int i = 0;      switch (number % 4) {     case 0:        do {     	  ++i;     case 3: ++i;     case 2: ++i;     case 1: ++i;       } while (count-- > 0);   }    std::cout << i; }

С первого взгляда этот код может показаться какой-то кашей, в которой конструкция switch и цикл do-while просто наложены друг на друга. Однако с точки зрения стандарта языка , здесь все совершенно законно.

На самом деле, здесь описан цикл, в котором переменная i увеличивается на единицу number раз, и, как не сложно теперь догадаться, в данном случае программа выведет число 11. То есть код выше будет справедливо «упростить» следующим образом:

#include <iostream>  int main() {   int number = 11;   int i = 0;      while (number-- > 0) {     ++i;   }    std::cout << i; }

Но для чего же тогда

Читать далее